<?php
class Database_MySQL extends Database implements IDatabase
{
    protected $conn;

    /**
     * Передаем ссылку на уже открытое соединение
     * @param resourse $connection
     */
    public function setConnection ($connection) {
        if (get_resource_type($connection) == 'mysql link') {
            $this->conn = $connection;
        } else {
            throw new DatabaseException ('$connection — не ресурс, или ресурс не того типа');
        }
        return $this;
    }

    /**
     * Устанавливаем соединение с БД
     * @param string $host
     * @param string $username
     * @param string $password
     */
    public function connect ($host, $username, $password) {
		$this->conn = mysql_connect ($host, $username, $password);
        return $this;
    }

    /**
     * Имя базы данных, с которой работаем
     * @param string $dbName
     */
    public function setDbName ($dbName) {
		mysql_select_db ($dbName, $this->conn);
        return $this;
    }

    /**
     * @param string $cs
     */
    public function setCharset ($cs) {
		mysql_set_charset ($cs, $this->conn);
        return $this;
    }

    /**
     * Начинаем, заканчиваем или откатываем транзакцию
     * @param int $action Database::START, Database::COMMIT, Database::ROLLBACK
     */
    public function transaction ($action) {
		if ($action == self::START) {
			mysql_query ('START TRANSACTION', $this->conn);
		} else if ($action == self::ROLLBACK) {
			mysql_query ('ROLLBACK', $this->conn);
		} else if ($action == self::COMMIT) {
			mysql_query ('COMMIT', $this->conn);
		} else {
            throw new DatabaseException("Неизвестный параметр \$action в Database::transaction()");
        }
        return $this;
    }

    /**
     * Создаем объект запроса
     * @return IDbQuery
     */
    public function query () {
        return new DbQuery_MySQL ($this->conn, $this->prefix);
    }
}